﻿using BLL;
using Model;
using Model.Auxiliar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace HRP.Private.Funcionarios
{
    public partial class Index : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack && Session["EmpresaActual"] != null)
            {

                Session["VistaEmpresaId"] = ((hrp_empresas)Session["EmpresaActual"]).id;

                CarregarDepartamentos();
                CarregarCargos();          
            }
            Page.PreRender += Page_PreRender;
            departamentosList.SelectedIndexChanged += departamentosList_SelectedIndexChanged;
        }

        void departamentosList_SelectedIndexChanged(object sender, EventArgs e)
        {
            CarregarCargos();
        }

        void Page_PreRender(object sender, EventArgs e)
        {
            if (Session["EmpresaActual"] != null && Session["VistaEmpresaId"] != null)
            {
                hrp_empresas empresa = (hrp_empresas)Session["EmpresaActual"];
                if (empresa.id != (int)Session["VistaEmpresaId"])//verifica se a empresa foi mudada
                {
                    CarregarDepartamentos();
                    CarregarCargos();
                    Session["VistaEmpresaId"] = empresa.id;
                }
                CarregarFuncionarios(empresa);
            }
        }

        void CarregarFuncionarios(hrp_empresas empresa)
        {
            int dep_id = 0;
            Int32.TryParse(departamentosList.SelectedItem.Value, out dep_id);
            int cargo_id = 0;
            Int32.TryParse(cargoList.SelectedItem.Value, out cargo_id);
            bool activos = Convert.ToBoolean(activosList.SelectedValue);
            funcionariosTable.DataSource = Funcionario_BLL.Instance.ObterListaFuncionario((int)Session["idclient"], empresa.id, dep_id, cargo_id, activos).OrderBy(f=>f.nome).ToList();
            funcionariosTable.DataBind();
        }

        void CarregarDepartamentos()
        {
            List<hrp_departamentos> listaDep = new List<hrp_departamentos>();
            hrp_departamentos todosDep = new hrp_departamentos() { id = 0, departamento = "Todos" };
            listaDep.Add(todosDep);
            if (Session["EmpresaActual"] != null)
            {
                hrp_empresas empresa = (hrp_empresas)Session["EmpresaActual"];
                listaDep.AddRange(Departamento_BLL.Instance.obterDepartamentosEmpresa((int)Session["idclient"], empresa.id, false, false).AsEnumerable());
            }
            departamentosList.DataSource = listaDep;
            departamentosList.DataBind();
        }

        void CarregarCargos()
        {
            hrp_empresas empresa = (hrp_empresas)Session["EmpresaActual"];
            int departamentoActual = 0;
            Int32.TryParse(departamentosList.SelectedItem.Value, out departamentoActual);

            List<Cargo> listaCargos = new List<Cargo>();
            Cargo todosCargos = new Cargo() { Id = 0, Nome = "Todos" };
            listaCargos.Add(todosCargos);
            listaCargos.AddRange(Cargo_BLL.Instance.obterCargosDepartamento(empresa.id, departamentoActual,true).AsEnumerable());
            cargoList.DataSource = listaCargos;
            cargoList.DataBind();
        }

        public void alterarEstadoFunc(Object sender, CommandEventArgs e)
        {
            int funcionarioId = 0;
            Int32.TryParse(e.CommandArgument.ToString(), out funcionarioId);
            if (funcionarioId != 0 && Session["idclient"] != null && Session["userid"] != null)
            {
                int id_cliente = (int)Session["idclient"];
                string userId = Session["userid"].ToString();
                //TODO: criar log
                Funcionario_BLL.Instance.activar_desactivarFuncionario(funcionarioId);
            }
        }

       
    }
}